home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / games / sakiba / source / pad.c < prev    next >
Text File  |  2000-06-20  |  2KB  |  105 lines

  1. /********************************************
  2.  
  3.     格闘シミュレーション「さきば」
  4.  
  5.                 入力
  6.  
  7.  ********************************************/
  8.  
  9. #include    <sys\iocs.h>
  10.  
  11. #include    "sakiba.h"
  12. #include    "pad.h"
  13.  
  14.  
  15. /*** ボタンに対応したキー *******/
  16. typedef struct {
  17.     PAD    pad;        /* ボタン */
  18.     int    kbit[2][2];    /* キー */
  19. } PAD_KEY;
  20.  
  21. static PAD_KEY    pad_key[6] = {    {PAD_UP,
  22.                     {{0x02, 0x20},        /* T */
  23.                      {0x08, 0x10}}},    /* 8 */
  24.                 {PAD_DOWN,
  25.                     {{0x05, 0x20},        /* V */
  26.                      {0x09, 0x10}}},    /* 2 */
  27.                 {PAD_LEFT,
  28.                     {{0x04, 0x02},        /* F */
  29.                      {0x08, 0x80}}},    /* 4 */
  30.                 {PAD_RIGHT,
  31.                     {{0x04, 0x08},        /* H */
  32.                      {0x09, 0x02}}},    /* 6 */
  33.                 {PAD_A,
  34.                     {{0x0a, 0x20},        /* XF1 */
  35.                      {0x0e, 0x04}}},    /* OPT.1 */
  36.                 {PAD_B,
  37.                     {{0x0a, 0x40},        /* XF2 */
  38.                      {0x0e, 0x08}}}        /* OPT.2 */
  39.         };
  40.  
  41.  
  42. static PAD    pad_data[2] = {0xffff, 0xffff};        /* パッドの状態 */
  43. static PAD    pad_just[2];                /* 今回の変化 */
  44. static PAD    pad_rept[2];                /* リピート付き */
  45. static int    pad_cnt[2] = {16, 16};            /* リピート用カウンタ */
  46.  
  47. Bool    esc_key  = FALSE;            /* ESCキー */
  48.  
  49.  
  50. /********************
  51.     パッド同期処理
  52.  ********************/
  53. void    pad_synch(void)
  54. {
  55.     PAD_KEY*    p;
  56.     PAD        last;
  57.     int        i, j;
  58.  
  59.     for (i = 0; i < 2; i++) {
  60.         last = pad_data[i];            /* 前回の状態 */
  61.         pad_data[i] = ~_iocs_joyget(i);        /* スティックデータ取得 */
  62.         for (j = 0, p = pad_key; j < 6; j++, p++) {
  63.             if ( _iocs_bitsns(p->kbit[i][0]) & p->kbit[i][1] ) {
  64.                 pad_data[i] |= p->pad;
  65.             }
  66.         }
  67.  
  68.         pad_just[i] = pad_data[i] & ~last;    /* 変化データ */
  69.         pad_rept[i] = pad_just[i];        /* リピート付き */
  70.         if ( pad_data[i] == last ) {
  71.             if ( --pad_cnt[i] == 0 ) {
  72.                 pad_rept[i] = pad_data[i];
  73.                 pad_cnt[i] = 4;
  74.             }
  75.         }
  76.         else {
  77.             pad_cnt[i] = 16;
  78.         }
  79.     }
  80.     if ( _iocs_bitsns(0) & 0x02 ) {        /* ESCキー */
  81.         esc_key = TRUE;
  82.     }
  83. }
  84.  
  85. /**************************************
  86.     パッド状態取得
  87.     引数    num = プレイヤー番号
  88.     戻り値    パッド状態
  89.  **************************************/
  90. PAD    get_pad(int num)        /* そのまま */
  91. {
  92.     return    pad_data[num];
  93. }
  94.  
  95. PAD    get_push(int num)        /* 押した直後 */
  96. {
  97.     return    pad_just[num];
  98. }
  99.  
  100. PAD    get_rept(int num)        /* リピート付き */
  101. {
  102.     return    pad_rept[num];
  103. }
  104.  
  105. /***************** End of File *******************************************/